package cn.tedu.csmall.business.service.impl;

import cn.tedu.csamll.order.service.IOrderService;
import cn.tedu.csmall.business.service.IBusinessService;
import cn.tedu.csmall.commons.pojo.order.dto.OrderAddDTO;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;


@Slf4j
@Service
public class BusinessServiceImpl implements IBusinessService {

    //Dobbo调用order模块的新增订单功能
    //business是单纯的消费者，不需要在类上添加@DubboService注解
    @DubboReference
    private IOrderService dubboOrderService;


    @Override
    //全局事务 一旦这个方法标记为@GlobalTransactional相当于设置了分布式事务运行的起点
    //相当于AT事务模型中的TM(事务管理器)
    @GlobalTransactional
    public void buy() {
        //模拟购买业务
        //先实例化一个用于新增订单的DTO对象
        OrderAddDTO orderAddDTO = new OrderAddDTO();
        orderAddDTO.setUserId("UU100");
        orderAddDTO.setCommodityCode("PC100");
        orderAddDTO.setMoney(200);
        orderAddDTO.setCount(5);
        log.info("新增订单信息为:{}",orderAddDTO);

        //dubbo调用，将上面实例化的对象生成订单信息，真实影像数据库
        dubboOrderService.orderAdd(orderAddDTO);

    }
}
